package main

import (
	"embed"
	"fmt"
	"goldtree/internal/cmd"
	_ "goldtree/internal/packed"
	"os"

	_ "github.com/gogf/gf/contrib/drivers/sqlite/v2"
	"github.com/gogf/gf/v2"
	"github.com/gogf/gf/v2/os/gctx"
	"github.com/wailsapp/wails/v2"
	"github.com/wailsapp/wails/v2/pkg/options"
	"github.com/wailsapp/wails/v2/pkg/options/assetserver"

	"goldtree/app"
)

//go:embed all:web
var assets embed.FS

func main() {
	// 检查命令行参数
	for _, arg := range os.Args[1:] {
		switch arg {
		case "--help", "-h":
			printHelp()
			return
		case "--version", "-v":
			printVersion()
			return
		}
	}

	// 检查是否应该运行桌面模式
	if shouldRunDesktop() {
		fmt.Println("🖥️  启动 GoldTree 桌面应用...")
		printDesktopHelp()
		runDesktopApp()
	} else {
		fmt.Println("🌐 启动 GoldTree Web 服务器...")
		fmt.Println("Hello GoFrame:", gf.VERSION)
		cmd.Main.Run(gctx.GetInitCtx())
	}
}

// printHelp 打印帮助信息
func printHelp() {
	fmt.Println("")
	fmt.Println("🌳 GoldTree - 股票量化交易管理系统")
	fmt.Println("========================================")
	fmt.Println("运行模式:")
	fmt.Println("  goldtree              - 智能模式（自动选择）")
	fmt.Println("  goldtree --desktop    - 桌面应用模式")
	fmt.Println("  goldtree --web        - Web服务器模式")
	fmt.Println("")
	fmt.Println("其他命令:")
	fmt.Println("  goldtree --help       - 显示帮助信息")
	fmt.Println("  goldtree --version    - 显示版本信息")
	fmt.Println("")
	fmt.Println("功能特性:")
	fmt.Println("  ✅ 股票数据管理")
	fmt.Println("  ✅ 股票池管理")
	fmt.Println("  ✅ 策略分析")
	fmt.Println("  ✅ 标签管理")
	fmt.Println("  ✅ 数据统计")
	fmt.Println("  ✅ 用户认证")
	fmt.Println("========================================")
	fmt.Println("")
}

// printVersion 打印版本信息
func printVersion() {
	fmt.Println("")
	fmt.Println("🌳 GoldTree v1.0.0")
	fmt.Println("Go框架: GoFrame", gf.VERSION)
	fmt.Println("数据库: SQLite")
	fmt.Println("前端: HTML + JavaScript + CSS")
	fmt.Println("桌面框架: Wails v2")
	fmt.Println("版权: GoldTree Team 2024")
	fmt.Println("")
}

// 桌面应用入口
func runDesktopApp() {
	// 创建应用实例
	appInstance := app.NewApp()

	// 创建应用配置
	err := wails.Run(&options.App{
		Title:     "GoldTree - 股票量化交易管理系统",
		Width:     1200,
		Height:    800,
		MinWidth:  800,
		MinHeight: 600,
		AssetServer: &assetserver.Options{
			Assets: assets,
		},
		BackgroundColour:  &options.RGBA{R: 245, G: 245, B: 245, A: 1},
		OnStartup:         appInstance.OnStartup,
		OnDomReady:        appInstance.OnDomReady,
		OnBeforeClose:     appInstance.OnBeforeClose,
		OnShutdown:        appInstance.OnShutdown,
		Frameless:         false,
		DisableResize:     false,
		Fullscreen:        false,
		WindowStartState:  options.Normal,
		HideWindowOnClose: false,

		// 开发工具（生产环境应设为false）
		Debug: options.Debug{
			OpenInspectorOnStartup: false,
		},

		// 禁用默认右键菜单
		EnableDefaultContextMenu: false,
	})

	if err != nil {
		fmt.Printf("启动桌面应用失败: %v\n", err)
		os.Exit(1)
	}
}

// 检查是否应该运行桌面模式
func shouldRunDesktop() bool {
	// 检查命令行参数
	for _, arg := range os.Args[1:] {
		switch arg {
		case "--desktop", "-d":
			return true
		case "--web", "-w":
			return false
		}
	}

	// 检查环境变量
	if mode := os.Getenv("GOLDTREE_MODE"); mode != "" {
		return mode == "desktop"
	}

	// 默认行为：如果是从构建的二进制文件运行，使用桌面模式
	// 如果是通过 go run 运行，使用 Web 模式
	if len(os.Args) > 0 {
		executable := os.Args[0]
		// 如果可执行文件名包含 "goldtree"（而不是 "go" 临时文件），使用桌面模式
		if executable != "" && !containsAny(executable, []string{"/tmp/", "\\Temp\\", "go-build"}) {
			return true
		}
	}

	return false
}

// 辅助函数：检查字符串是否包含任意一个子字符串
func containsAny(s string, substrs []string) bool {
	for _, substr := range substrs {
		if len(s) >= len(substr) {
			for i := 0; i <= len(s)-len(substr); i++ {
				if s[i:i+len(substr)] == substr {
					return true
				}
			}
		}
	}
	return false
}

// printDesktopHelp 打印桌面模式帮助信息
func printDesktopHelp() {
	fmt.Println("")
	fmt.Println("🖥️  GoldTree 桌面应用模式")
	fmt.Println("========================================")
	fmt.Println("使用方法:")
	fmt.Println("  goldtree              - 启动桌面应用")
	fmt.Println("  goldtree --web        - 启动Web服务器模式")
	fmt.Println("  goldtree --desktop    - 强制桌面模式")
	fmt.Println("")
	fmt.Println("环境变量:")
	fmt.Println("  GOLDTREE_MODE=desktop - 设置为桌面模式")
	fmt.Println("  GOLDTREE_MODE=web     - 设置为Web模式")
	fmt.Println("")
	fmt.Println("功能特性:")
	fmt.Println("  ✅ 原生桌面应用体验")
	fmt.Println("  ✅ 无需浏览器运行")
	fmt.Println("  ✅ 系统级集成")
	fmt.Println("  ✅ 文件拖拽支持")
	fmt.Println("  ✅ 快捷键支持")
	fmt.Println("  ✅ 桌面通知")
	fmt.Println("========================================")
	fmt.Println("")
}
